package com.hy;

import java.util.Stack;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:移掉 K 位数字
 *
 * 给你一个以字符串表示的非负整数 num 和一个整数 k ，移除这个数中的 k 位数字，使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
 *
 * author: Mr.Du
 * Date: 2023/12/19
 * Time: 15:44
 */
public class RemoveKdigits {

    public String removeKdigits(String s, int k) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length();i++){
            char c = s.charAt(i);
            while(!stack.isEmpty() && c < stack.peek() && k > 0){
                stack.pop();
                k--;
            }
            stack.push(c);
        }
        while(k > 0){
            stack.pop();
            k--;
        }
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i < stack.size();i++){
            if(sb.length() == 0 && stack.get(i) == '0') continue;
            sb.append(stack.get(i));
        }
        if(sb.length() == 0) return "0";
        return sb.toString();
    }

    public static void main(String[] args) {
        RemoveKdigits removeKdigits = new RemoveKdigits();
        removeKdigits.removeKdigits("10200", 1);
    }
}
